package com.mzj.saas.mservice.contract.controller;

import com.mzj.saas.commons.ResultBean;
import com.mzj.saas.mservice.contract.service.QiYueSuoAppService;
import com.mzj.saas.mservice.contract.vo.ContractVO;
import com.mzj.saas.mservice.contract.vo.QysContractInfoVO;
import com.qiyuesuo.sdk.v2.bean.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 契约锁-电子合同app接口
 */
@Controller
@RequestMapping("/contractApp/qys")
public class QiYueSuoAppController {
    @Autowired
    private QiYueSuoAppService qiYueSuoAppService;

    /**
     * 获取所有模板
     *
     * @return
     */
    @GetMapping("/getTemplates")
    @ResponseBody
    public ResultBean<List<Template>> getTemplates(@RequestHeader String accessToken) {
        return qiYueSuoAppService.getTemplates(accessToken);
    }

    /**
     * 模板预览页面链接
     *
     * @param accessToken
     * @param templateId
     * @return
     */
    @GetMapping("/getTemplatePageurl")
    @ResponseBody
    public ResultBean<String> getTemplatePageurl(@RequestHeader String accessToken,
                                                 @RequestParam(required = true) Long templateId) {
        return qiYueSuoAppService.getTemplatePageurl(templateId);
    }

    /**
     * 获取模板详情
     *
     * @param accessToken
     * @param templateId
     * @return
     */
    @GetMapping("/getTemplateDetail")
    @ResponseBody
    public ResultBean<Template> getTemplateDetail(@RequestHeader String accessToken,
                                                  @RequestParam(required = true) Long templateId) {
        return qiYueSuoAppService.getTemplateDetail(templateId);
    }

    /**
     * 合同详情
     *
     * @param accessToken
     * @param contractId
     */
    @GetMapping("/getContractDetail")
    @ResponseBody
    public ResultBean<QysContractInfoVO> getContractDetail(@RequestHeader String accessToken,
                                                           @RequestParam(required = true) Long contractId) {
        return qiYueSuoAppService.getContractDetail(contractId);
    }

    /**
     * 创建合同步骤 1.创建合同草稿 2.用模板添加合同文档/用文件添加合同文档 3.指定签署位置并发起合同
     * --测试方法
     * @param accessToken
     * @return
     */
	/*@PostMapping("/contractDraftByTemplate")
	@ResponseBody
	public ResultBean<Object> createContractDraftByTemplate(@RequestHeader String accessToken,
			@RequestBody QysContractVO vo) {
		return qiYueSuoAppService.createContractDraftByTemplate(accessToken, vo);
	}*/

    /**
     * 获取签署合同短链接
     *
     * @param accessToken
     * @param contractId
     * @return
     */
    @GetMapping("/contractShorturl")
    @ResponseBody
    public ResultBean<Object> contractShorturl(@RequestHeader String accessToken,
                                               @RequestParam(required = true) Long contractId) {
        return qiYueSuoAppService.contractShorturl(accessToken, contractId);
    }

    /**
     * 下载合同文档
     *
     * @param accessToken
     * @param contractId
     * @return
     */
    @GetMapping("/documentDownload")
    @ResponseBody
    public void documentDownload(@RequestHeader String accessToken, @RequestParam(required = true) Long contractId,
                                 HttpServletResponse response) throws Exception {
        qiYueSuoAppService.documentDownload(accessToken, contractId, response);
    }
    
    /**
     * 下载合同文档(线下合同)
     *
     * @param accessToken
     * @param contractId
     * @return
     */
    @GetMapping("/contract/download")
    @ResponseBody
    public void offlineDocumentDownload(@RequestHeader String accessToken, @RequestParam(required = true) String contractNumber,
                                 HttpServletResponse response) throws Exception {
        qiYueSuoAppService.downloadContract(contractNumber, response);
    }

    /**
     * 线上, 生成电子签章 1.创建合同草稿 2.用模板添加合同文档/用文件添加合同文档 3.签署公章 4.指定签署位置并发起合同 5.获取合同签订短链接
     *
     * @param accessToken
     * @param contractId
     * @param type               操作：1签约 2续约
     * @param vo                 续期时的合同数据
     * @param customField        续签时的合同自定义字段
     * @param contractAttachment 续签时的合同附件
     * @return
     * @author shun
     * @date 2021年6月11日
     */
    @PostMapping("/sign/{contractNumber}/{type}")
    @ResponseBody
    public ResultBean<Object> sign(@RequestHeader String accessToken, @PathVariable String contractNumber,
                                   @PathVariable Integer type, @RequestBody ContractVO vo) {
        return qiYueSuoAppService.createContractDraft(accessToken, contractNumber, vo, type);
    }
    
    /**
     * 线下, 生成合同文件PDF
     *
     * @param accessToken
     * @param contractId
     * @param type               操作：1签约 2续约
     * @param vo                 续期时的合同数据
     * @param customField        续签时的合同自定义字段
     * @param contractAttachment 续签时的合同附件
     * @return
     * @author shun
     * @date 2021年6月11日
     */
    @PostMapping("/offline/{contractNumber}/{type}")
    @ResponseBody
    public ResultBean<Object> createOfflineContractDraft(@RequestHeader String accessToken, @PathVariable String contractNumber,
                                   @PathVariable Integer type, @RequestBody ContractVO vo) {
        return qiYueSuoAppService.createOfflineContractDraft(accessToken, contractNumber, vo, type);
    }
}
